package com.sta.oldman.utils;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * QQ邮箱发送工具类（支持HTML内容）
 * 支持指定收件人、邮件主题和HTML格式内容
 */
public class QQEmailUtils {
    // 发件人邮箱（请替换为实际的发件人QQ邮箱）
    private static final String SENDER_EMAIL = "2221866404@qq.com";
    // 发件人邮箱授权码（请替换为实际的授权码）
    private static final String SENDER_AUTH_CODE = "pgytthqtrgmndjcg";
    // QQ邮箱SMTP服务器地址
    private static final String SMTP_HOST = "smtp.qq.com";
    // SMTP服务器端口（TLS加密方式）
    private static final String SMTP_PORT = "587";

    /**
     * 发送HTML格式邮件到指定收件人
     *
     * @param recipient 收件人邮箱地址
     * @param subject   邮件主题
     * @param htmlContent HTML格式的邮件内容
     * @return 发送成功返回true，失败返回false
     */
    public static boolean sendHtmlEmail(String recipient, String subject, String htmlContent) {
        // 校验参数合法性
        if (recipient == null || recipient.trim().isEmpty()) {
            System.err.println("收件人邮箱不能为空");
            return false;
        }
        if (subject == null || subject.trim().isEmpty()) {
            System.err.println("邮件主题不能为空");
            return false;
        }
        if (htmlContent == null || htmlContent.trim().isEmpty()) {
            System.err.println("HTML内容不能为空");
            return false;
        }

        // 配置邮件服务器属性
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", SMTP_HOST);         // SMTP服务器地址
        props.setProperty("mail.smtp.port", SMTP_PORT);         // 端口号
        props.setProperty("mail.smtp.auth", "true");            // 需要认证
        props.setProperty("mail.smtp.starttls.enable", "true"); // 启用TLS加密
        props.setProperty("mail.transport.protocol", "smtp");   // 传输协议

        // 创建会话对象，设置认证信息
        Session session = Session.getDefaultInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(SENDER_EMAIL, SENDER_AUTH_CODE);
            }
        });
        // 开启调试模式（开发阶段可启用，生产环境建议关闭）
        session.setDebug(false);

        try {
            // 创建邮件消息对象
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(SENDER_EMAIL));                  // 设置发件人
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient)); // 设置收件人
            message.setSubject(subject);                                         // 设置主题

            // 关键修改：设置内容为HTML格式，指定MIME类型为text/html
            message.setContent(htmlContent, "text/html;charset=UTF-8");

            // 发送邮件
            Transport.send(message);
            System.out.println("HTML邮件发送成功！收件人：" + recipient);
            return true;
        } catch (MessagingException e) {
            System.err.println("HTML邮件发送失败！收件人：" + recipient + "，错误信息：" + e.getMessage());
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 批量发送HTML格式邮件到多个收件人
     *
     * @param recipients 收件人邮箱数组
     * @param subject    邮件主题
     * @param htmlContent HTML格式的邮件内容
     * @return 全部发送成功返回true，否则返回false
     */
    public static boolean sendBatchHtmlEmail(String[] recipients, String subject, String htmlContent) {
        if (recipients == null || recipients.length == 0) {
            System.err.println("收件人列表不能为空");
            return false;
        }

        boolean allSuccess = true;
        for (String recipient : recipients) {
            // 逐个发送，记录是否有失败
            if (!sendHtmlEmail(recipient, subject, htmlContent)) {
                allSuccess = false;
            }
        }
        return allSuccess;
    }
}